package com.nucarf.bi.digtalize.util;


import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.Properties;

@Slf4j
public class PropertyUtil {

    private static final String CONFIG_NAME = "application.properties";

    private static Properties prop;

    private static Long lastModified = 0L;

    /** * 初始化加载配置文件 */
    private static void init() {
        prop = new Properties();
        InputStream fis=null;
        try {
            fis = PropertyUtil.class.getClassLoader().getResourceAsStream(CONFIG_NAME);
            prop.load(fis);
        } catch (IOException e) {
            log.error(CONFIG_NAME +"载入系统路径资源文件错误!");
            e.printStackTrace();
        }finally {
            try {
                if(fis != null){
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /** * 判断配置文件是否改动 * @return returnValue ：true:改动过 ，false:没有改动过 */
    private static boolean isPropertiesModified() {
        boolean returnValue = false;
        File file = new File(PropertyUtil.class.getClassLoader().getResource(CONFIG_NAME).getPath());
        if (file.lastModified() > lastModified) {
            log.info("修改CONFIG_NAME：{} 配置文件",CONFIG_NAME);
            lastModified=file.lastModified();
            returnValue = true;
        }
        return returnValue;
    }

    /** * 根据key获取配置文件中的值 * @param key key值 * @return 返回value */
    public static String getPropertyValue(String key) {

        if (prop == null || isPropertiesModified()) {
            init();
        }
        String value = prop.get(key).toString();
//        log.info("根据key获取value值, key:{} ,value：{}",key,value);
        return value;
    }

    /** * 获取配置文件中所有的value值 * @return 所有配置的value值 */
    private static String getPropertyAllValue() {

        if (prop == null || isPropertiesModified()) {
            init();
        }
        Collection<Object> values = prop.values();
        log.info("CONFIG_NAME :{},配置的所有的values：{}",CONFIG_NAME,values.toString());
        return values.toString();
    }


    public static void main(String[] args) {
        final String timeout = PropertyUtil.getPropertyValue("jdbc.driver");
        System.out.println(timeout);
    }
}
